package com.bbs.model.controllers;

import java.util.Date;

import javax.servlet.http.HttpSession;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.bbs.model.entity.Admin;
import com.bbs.model.entity.Userinfo;
import com.bbs.model.services.UserManageService;

/**
 * 用户管理Controller类
 * 
 * @author 乔娇
 *
 */
@RestController
public class UserManageController {
	@Autowired
	UserManageService us;

	// 当前用户信息在session中key名字
	public static final String CURRENT_USER = "CURRENTUSER";
	// 验证密保答案,输入用户名在session中key名字
	public static final String SECQ_USER = "SECQ_USER";

	/**
	 * 处理注册请求 页面验证后，剩余验证username是否可用
	 * 
	 * @param user
	 * @return
	 */
	@RequestMapping("/reg")
	public boolean doReg(Userinfo user) {
		return us.addNewUser(user);
	}

	/**
	 * 检查用户名是否可用
	 * 
	 * @param user
	 * @return
	 */
	@RequestMapping("/checkname")
	public boolean doCheckName(Userinfo user) {
		return us.checkUsername(user.getUsername());
	}

	/**
	 * 检查用户是否被冻结
	 * @param user
	 * @return
	 */
	@RequestMapping("/checkuserstatus")
	public boolean doCheckuserstatus(Userinfo user) {
		return us.checkuserstatus(user);
	}

	/**
	 * 用来处理用户登录请求的方法
	 * 
	 * @param user
	 * @param session
	 * @return
	 */
	// @ResponseBody // 通知SpringMVC该方法返回值需解析成json对象
	@RequestMapping("/login") // 给方法设定url名
	public boolean dologin(Userinfo user, HttpSession session) {
		// 调用service方法验证用户登录是否成功
		Userinfo result = us.checkLogin(user);
		if (null != result) {
			// 如果成功，需要将用户信息放入session保存
			// session中存放数据以name/value对形式存放，类似于Map
			session.setAttribute(CURRENT_USER, result);

			return true;
		}

		else {
			return false;
		}

	}

	/**
	 * 获取当前登录用户的详细信息
	 * 
	 * @return
	 */
	@RequestMapping("/getcuruser")
	public Userinfo doGetCurrentUserinfo(HttpSession session) {

		Userinfo result = (Userinfo) session.getAttribute(CURRENT_USER);
		if (result != null) {
			return result;
		} else {
			// 仍返回一个空值,方便游客登陆
			return new Userinfo();
		}
	}

	/**
	 * 获取当前登录管理员的详细信息
	 * 
	 * @return
	 */
	@RequestMapping("/getcuradmin")
	public Admin doGetCurrentadmin(HttpSession session) {

		Admin result = (Admin) session.getAttribute(CURRENT_USER);
		if (result != null) {
			return result;
		} else {
			return new Admin();
		}
	}

	/**
	 * 验证密保问题 参数：当前userid，输入的密保答案seca
	 * 
	 * @return
	 */
	@RequestMapping("/checkseca")
	public boolean doCheckSeca(Userinfo user) {
		return us.checkSeca(user);
	}

	/**
	 * 修改密码 参数：userid，newpassword
	 * 
	 * @return
	 */
	@RequestMapping("/modpassword")
	public boolean doModPassword(Userinfo user) {
		return us.modPassword(user);
	}

	/**
	 * 注销登录
	 * 
	 * @param session
	 * @return
	 */
	@RequestMapping("/logout")
	public boolean doLogout(HttpSession session) {
		session.removeAttribute(CURRENT_USER);
		return true;
	}

	/**
	 * 检查用户输入密码，参数：userid,password 封装在对象里
	 * 
	 * @return
	 */
	@RequestMapping("/checkpassword")
	public boolean doCheckOldPassword(Userinfo user) {
		return us.checkOldPassword(user);
	}

	/**
	 * 获取上次登录时间
	 * 
	 * @param userid
	 * @return
	 */
	@RequestMapping("/getlastlogtime")
	public Date doGetLastlogtime(Userinfo user) {
		return us.getLastlogtime(user);
	}

	/**
	 * 检查验证密保输入的用户名,返回该用户对象,获得userid,密保问题
	 * 
	 * @param user
	 * @return 用户对象/空对象
	 */
	@RequestMapping("/getsecq")
	public Userinfo doGetSecqByUsername(Userinfo user, HttpSession session) {
		Userinfo result = us.getSecqByUsername(user);

		if (result != null) {
			// 获取用户对象存入session
			session.setAttribute(SECQ_USER, result);

			return result;
		} else {
			session.removeAttribute(SECQ_USER);
			return new Userinfo();
		}
	}

	/**
	 * 获取验证密保答案的userid
	 * 
	 * @param session
	 * @return 用户对象
	 */
	@RequestMapping("/getsecquser")
	public Userinfo doGetSecqUser(HttpSession session) {
		return (Userinfo) session.getAttribute(SECQ_USER);
	}

}
